#ifndef SQL_H
#define SQL_H

#include <QObject>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QVector>
#include <QVariantMap>
#include <QCryptographicHash>
#include <QDateTime>
#include <QDebug>

class UserDatabase : public QObject
{
    Q_OBJECT

public:
    // 用户数据结构体
    struct User {
        int user_id = 0;           // 用户ID，主键
        QString username;          // 用户名
        QString password;          // 密码(加密后)
        QString email;             // 邮箱
        QString phone;             // 手机号
        QString role = "user";     // 角色，默认普通用户
        QString created_at;        // 创建时间
        QString updated_at;       // 更新时间
    };

    explicit UserDatabase(QObject *parent = nullptr);
    ~UserDatabase();

    // 数据库连接管理
    bool openDatabase(const QString &databaseName);
    void closeDatabase();
    bool isOpen() const;

    // 用户操作
    bool addUser(const User &user);
    bool deleteUser(int user_id);
    bool deleteUserByUsername(const QString &username);
    bool updateUser(const User &user);
    bool updateUserPassword(const QString &username, const QString &newPassword);
    bool authenticateUser(const QString &username, const QString &password);
    bool verifyUserIdentity(const QString &username, const QString &phone);

    // 查询接口
    QVector<User> getAllUsers();
    User getUserById(int user_id);
    User getUserByUsername(const QString &username);
    User getUserByEmail(const QString &email);
    User getUserByPhone(const QString &phone);

private:
    QSqlDatabase m_db;  // 数据库连接

    // 内部方法
    bool createTables();
    QString hashPassword(const QString &password);
    QString getCurrentDateTime();
    bool executeQuery(QSqlQuery &query);
    bool prepareQuery(QSqlQuery &query, const QString &sql, const QVariantMap &params);
};

#endif // USERDATABASE_H
